<script setup>
import {onMounted, ref} from 'vue';
import luckysheet from "luckysheet";
import LuckyExcel from 'luckyexcel'
import index from "@/components/analysisSheetComponents/gufei/tmpl103/index.vue";
import {useAnalysetStore} from "@/store/index";
import AnalyesAPI from "@/api/system/analyes";
import {removeNullSampleSN} from "@/utils/method";
import dayjs from "dayjs";

let options = {
  container: "luckysheet", //luckysheet为容器id
  lang: 'zh',
  autoCalculate: true,
  data: [
    {
      "row": 9,
      "column": 12, // 列数
      "defaultRowHeight": 30, // 自定义行高
      "defaultColWidth": 100, // 自定义列宽
      "celldata": [
        // 初始化表格数据，第一行包含表头
        {"r": 0, "c": 0, "v": "样品编号",}, // A1
        {"r": 0, "c": 1, "v": "类型",}, // B1
        {"r": 0, "c": 2, "v": "干燥后质量m2 (g)",}, // B1
        {"r": 0, "c": 3, "v": "湿样质量m1 (g)",}, // B1
        {"r": 0, "c": 4, "v": "取样质量m3 (g)",}, // B1
        {"r": 0, "c": 5, "v": "元素：  ",}, // B1
        {"r": 0, "c": 9, "v": "元素：",}, // B1
        {"r": 1, "c": 5, "v": "稀释倍数f",}, // B1
        {"r": 1, "c": 6, "v": "机读浓度ρ-ρ₀()",}, // B1
        {"r": 1, "c": 7, "v": "样品浓度ω(  )",}, // B1
        {"r": 1, "c": 8, "v": "测定结果",}, // B1
        {"r": 1, "c": 9, "v": "稀释倍数f",}, // B1
        {"r": 1, "c": 10, "v": "机读浓度ρ-ρ₀(     )",}, // B1
        {"r": 1, "c": 11, "v": "样品浓度ω(      )",}, // B1
        {"r": 1, "c": 12, "v": "测定结果 ",}, // B1
        {"r": 0, "c": 13, "v": "备注",}, // B1
      ], // 初始化数据
      "config": {
        "merge": {
          "0_0": {
            "r": 0, // 起始行
            "c": 0, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },
          "0_1": {
            "r": 0, // 起始行
            "c": 1, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },
          "0_2": {
            "r": 0, // 起始行
            "c": 2, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },
          "0_3": {
            "r": 0, // 起始行
            "c": 2, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },
          "0_4": {
            "r": 0, // 起始行
            "c": 2, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },
          "0_5": {
            "r": 0, // 起始行
            "c": 3, // 起始列
            "rs": 1, // 跨越的行数
            "cs": 4  // 跨越的列数
          },
          "0_9": {
            "r": 0, // 起始行
            "c": 7, // 起始列
            "rs": 1, // 跨越的行数
            "cs": 4  // 跨越的列数
          },
          "0_13": {
            "r": 0, // 起始行
            "c": 11, // 起始列
            "rs": 2, // 跨越的行数
            "cs": 1  // 跨越的列数
          },

        }, // 合并单元格
        "columnlen": { // 设置列宽
          "0": 130, // 第一列宽度 100%
          "1": 130, // 第二列宽度 120px
          "2": 130, // 第三列宽度 180px
          "3": 130, // 第四列宽度 100px
          "4": 100, // 第五列宽度 200px
          "5": 100,  // 第六列宽度 100%
          "6": 100,  // 第六列宽度 100%
          "7": 100,  // 第六列宽度 100%
          "8": 100,  // 第六列宽度 100%
          "9": 100,  // 第六列宽度 100%
        }, // 表格列宽
      },
    }
  ],
  showinfobar: false, // 隐藏信息栏
  showtoolbar: true, // 隐藏工具栏
};

const sheetData = ref('')
const waterForm = ref({
  bdatas: {
    qxjhdcd: Array.from({length: 4}, () => ({
      qx_ypbh: '', qx_xdwc: '', qx_zkyq: '', qx_sfhg: ''
    })),
    bzsyyjrl: {},
    bzry: Array.from({length: 2}, () => ({
      ys: '',
      bzzbyph: '',
      bzzbynd: '',
      zbyyxrq: '',
      yqzbytj: '',
      drtj: '',
      zjynd: '',
      yqzjytj: '',
      bzdrtj: '',
      syynd: '',
      notes: '',
    })),
    syynd: {},
  },
  pxycd: Array.from({length: 8}, () => ({
    px_ys: '',
    px_ypbh: '',
    px_cdnd: '',
    px_pjz: '',
    px_xdwc: '',
    px_zkbz: '',
    px_sfhg: '',
  })),
  bzycd: [
    {bz_ys: '', bz_bzph: '', bz_cdnd: '', bz_bzz: '', bz_sfhg: ''},
    {bz_ys: '', bz_bzph: '', bz_cdnd: '', bz_bzz: '', bz_sfhg: ''},
  ],
  jbycd: Array.from({length: 3}, () => ({
    jb_ys: '',
    jb_ypbh: '',
    jb_jbhypnd: '',
    jb_bynd: '',
    jb_jbl: '',
    jb_yyphl: '',
    jb_jbhsl: '',
    jb_zkyq: '',
    jb_sfhg: ''
  })),
  unit: {},
})
const switchAB = ref(true)
const checkTime = ref('')
const processedData = ref([])
const cDatas = ref([])
const checkDialogVisible = ref(false)
const analyseStatusPage = useAnalysetStore()
const record_sn = analyseStatusPage.waterForm.record_sn
// 在组件挂载后初始化 Lucky-sheet
onMounted(() => {
  // 初始化表格
  luckysheet.create(options);
  // 获取表单信息
  getWaterCapacity()
});


// 用于获取最新的表格数据
const getUpdatedData = () => {
  checkDialogVisible.value = true
};
const handleCheckClose = () => {
  checkDialogVisible.value = false
}


// 获取——获取 水质容量A   工作表
const getWaterCapacity = () => {
  let josn = {
    // id: analyseStatusPage.waterForm.id,
    id: 1,
    // record_sn: record_sn,
    record_sn: 103,
  }
  AnalyesAPI.getAnalyseACapacity(josn).then(data => {
    // console.log('获取水质容量 A单', data)
    // waterForm.value = data
    // sheetData.value = data.configs
    // options.data = sheetData.value
    // luckysheet.create(options);
    // processedData.value = data.adatas
  })
}


// 保存新增表单
const handleAddWaterPh = () => {
  console.log(luckysheet.getLuckysheetfile())
  sheetData.value = luckysheet.getLuckysheetfile();
  options.data = sheetData.value; // 将字符串解析为 JSON
  console.log(options.data)
  const data = options.data[0].data.map(row => {
    return row
        .map(cell => {
          return cell ? {
            field: cell.m || "默认字段",
            value: cell.v || null
          } : null;
        })
        .filter(cell => cell !== null); // 删除 null 值
  });
  console.log(data);
  processedData.value = processData(data);
  cDatas.value = removeNullSampleSN(processDate(data))
  console.log('cDatascDatas', cDatas.value)

  //   调保存新增接口
  AnalyesAPI.addWaterCapacity({
    ...waterForm.value,
    // record_sn: record_sn,
    record_sn: 103,
    // id: analyseStatusPage.waterForm.id,
    task_id: analyseStatusPage.waterForm.taskId,
    configs: sheetData.value,
    add_form_id: analyseStatusPage.waterForm.add_form_id,
    adatas: processedData.value,
    cdatas: cDatas.value,
  }).then(data => {
    console.log('调接口拿数据', data)
  })
}


// 处理能用的数据
const processData = (data) => {
  if (!data || data.length < 3) {
    return [];
  }

  // 提取表头信息
  const header1 = data[0].map(item => item.value).filter(value => value !== null);
  const header2 = data[1].map(item => item.value).filter(value => value !== null);

  // 提取数据行
  // const row = data[2].map(item => item.value);
  const row = data.slice(2).map(rowData => rowData.map(item => item.value));

  // 构建嵌套结构
  const resultArray = [];
  for (let i = 0; i < row.length; i++) {
    const currentRow = row[i];
    const result = {
      [header1[0]]: currentRow[0], // 样品编号
      [header1[1]]: currentRow[1], // 类型
      [header1[2]]: currentRow[2], // wdm(%) wH2O(%)
      [header1[3]]: currentRow[3], // wdm(%) wH2O(%)
      [header1[4]]: currentRow[4], // wdm(%) wH2O(%)
      [header1[5]]: {       // 元素：1
        [header2[0]]: currentRow[5], // 稀释倍数f
        [header2[1]]: currentRow[6], // 机读浓度ρ-ρ₀()
        [header2[2]]: currentRow[7],  // 元素：1
        [header2[3]]: currentRow[8],  // 元素：1
      },
      [header1[6]]: {       // 元素：2
        [header2[4]]: currentRow[9], // 元素：2
        [header2[5]]: currentRow[10], // 机读浓度ρ-ρ₀(     )
        [header2[6]]: currentRow[11],  // 样品浓度ω(      )
        [header2[7]]: currentRow[12],  // 样品浓度ω(      )
      },
      [header1[6]]: currentRow[13]  // 备注
    };
    resultArray.push(result);
  }
  return resultArray;
};

// 剔除元素
const removeElementPrefix = (text) => {
  return text.replace(/^元素：\s*/, '');
};

// 剔除样品浓度ω( )
const extractBracketContent = (text) => {
  const match = text.match(/\((.*?)\)/);
  return match ? match[1] : text; // 如果匹配成功，返回括号内的内容，否则返回原文本
};
const processDate = (data) => {
  if (!data || data.length < 3) {
    return [];
  }

  // 提取表头信息
  const header1 = data[0].map(item => item.value).filter(value => value !== null);
  const header2 = data[1].map(item => item.value).filter(value => value !== null);
  // 提取数据行
  // const row = data[2].map(item => item.value);
  const row = data.slice(2).map(rowData => rowData.map(item => item.value));

  // 构建嵌套结构
  const resultArray = [];
  for (let i = 0; i < row.length; i++) {
    const currentRow = row[i];
    const result = {
      'sample_sn': currentRow[0], // 样品编号
      'type': currentRow[1], // 类型
      datas: [
        {
          name: removeElementPrefix(header1[5]),
          cdjg: currentRow[8],
          dw: extractBracketContent(header2[2]),
        },
        {
          name: removeElementPrefix(header1[6]),
          cdjg: currentRow[12],
          dw: extractBracketContent(header2[6]),
        },
      ],
      // "ys1": {       // 元素：1
      //   "name": removeElementPrefix(header1[3]),
      //   "value": currentRow[5],  // 元素：1
      //   "dw": extractBracketContent(header2[2]),  // 元素：1
      //   "cdjg": currentRow[6],  // 元素：1
      // },
      // "ys2": {       // 元素：2
      //   "name": removeElementPrefix(header1[4]),
      //   "value": currentRow[8],  // 样品浓度ω(      )
      //   "dw": extractBracketContent(header2[6]),  // 样品浓度ω(      )
      //   "cdjg": currentRow[10],  // 样品浓度ω(      )
      // },
    };
    resultArray.push(result);
  }
  return resultArray;
};


// 上传文件
const loadExcel = (evt) => {
  const files = evt.target.files
  console.log(files)
  if (files == null || files.length == 0) {
    alert('No files wait for import')
    return
  }
  let name = files[0].name
  let suffixArr = name.split('.'),
      suffix = suffixArr[suffixArr.length - 1]
  if (suffix != 'xlsx') {
    alert('Currently only supports the import of xlsx files')
    return
  }
  LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
    if (exportJson.sheets == null || exportJson.sheets.length == 0) {
      alert('Failed to read the content of the excel file, currently does not support xls files!')
      return
    }
    console.log('exportJson', exportJson.sheets)
    jsonData.value = exportJson

    luckysheet.destroy()
    luckysheet.create({
      container: 'luckysheet', //luckysheet is the container id
      showinfobar: false,
      data: exportJson.sheets,
      title: exportJson.info.name,
      userInfo: exportJson.info.name.creator
    })
  })
}


// 确认提交校核
const handleSubmit = () => {
  console.log(checkTime.value)
  const formattedDate = checkTime.value ? dayjs(checkTime.value).format('YYYY-MM-DD') : '';
  console.log(analyseStatusPage.waterForm.id)
  AnalyesAPI.handleCheckTimeData({
    id: analyseStatusPage.waterForm.add_form_id,
    submit_date: formattedDate
  }).then(data => {
    if (data === 1) {
      ElMessage.success('提交成功！')
      checkDialogVisible.value = false
    }
  })
}

const handleSwitch = () => {
  switchAB.value = !switchAB.value
}
</script>

<template>
  <div class="card">
    <div v-show="switchAB">
      <el-card class="box-card">
        <h1 style="text-align: center">固体废物 原子吸收分光光度法分析原始记录（A面）</h1>
        <div>SXLPHJ/JL/CX-22-103</div>
        <table class="table">
          <tr>
            <td colspan="2" style="width: 9%;">任务编号</td>
            <td colspan="4">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.task_name"/>
            </td>
            <td colspan="2" style="width: 9%;">采样日期</td>
            <td colspan="3">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.sampling_time"/>
            </td>
            <td colspan="2" style="width: 9%;">分析日期</td>
            <td colspan="4">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.anal_time"/>
            </td>
            <td colspan="3">分析项目</td>
            <td colspan="5">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.fxxm"/>
            </td>
          </tr>
          <tr>
            <td colspan="2" style="width: 9%;">分析仪器</td>
            <td colspan="4">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.device_name"/>
            </td>
            <td colspan="2" style="width: 10%;">仪器型号</td>
            <td colspan="3">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.device_model"/>
            </td>
            <td colspan="2">仪器编号</td>
            <td colspan="4">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.device_number"/>
            </td>
            <td colspan="3">环境条件</td>
            <td colspan="5">
              <div style="display: flex;align-items: center">
                <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                          v-model="waterForm.temperature">
                  <template #append>
                    <span style="background-color: transparent;color: black">℃</span>
                  </template>
                </el-input>
                <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                          v-model="waterForm.humidity">
                  <template #append>
                    <span style="background-color: transparent;color: black">%RH</span>
                  </template>
                </el-input>
              </div>
            </td>
          </tr>
          <tr>
            <td colspan="2">分析方法</td>
            <td colspan="15">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.method"/>
            </td>
            <td colspan="3">检出限</td>
            <td colspan="5">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.limit_val"/>
            </td>
          </tr>
          <tr>
            <td colspan="2">浸出液制备方法</td>
            <td colspan="15">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.jcyzbff"/>
            </td>
            <td colspan="3" rowspan="3">计算公式</td>
            <td colspan="5" rowspan="3">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.js_formula"/>
            </td>
          </tr>
          <tr>
            <td colspan="2">测定条件</td>
            <td colspan="15">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.cdtj"/>
            </td>
          </tr>
          <tr>
            <td colspan="2">前处理过程</td>
            <td colspan="15">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.process"/>
            </td>
          </tr>
          <tr>
            <td colspan="2">备注</td>
            <td colspan="23">
              <el-input style="width: 100%;border: 1px solid transparent" placeholder="请输入"
                        v-model="waterForm.notes"/>
            </td>
          </tr>
        </table>
        <!--      <input id="uploadBtn" type="file" @change="loadExcel"/>-->
        <div id="luckysheet" style="width:100%;height:500px;"></div>
      </el-card>
    </div>
    <div v-show="!switchAB">
      <index :water-form="waterForm"></index>
    </div>
    <el-card class="box-card" style="margin-top: 30px">
      <div style="display: flex;justify-content: space-between">
        <el-button @click="handleSwitch">
          {{ switchAB ? 'B面' : 'A面' }}
        </el-button>
        <div>
          <el-button>取消</el-button>
          <!--          <el-button>新增</el-button>-->
          <!--          <el-button>复制并新增</el-button>-->
          <el-button @click="handleAddWaterPh">保存</el-button>
          <el-button type="primary" @click="getUpdatedData">提交</el-button>
        </div>
      </div>
    </el-card>

    <!--    提交校核-->
    <el-dialog title="提交校核" v-model="checkDialogVisible" width="30%" center
               :before-close="handleCheckClose">
      <div class="check">
        <!--        头部-->
        <div class="check-header" style="display: flex;align-items: center;margin-bottom: 20px">
          <p>表单填写日期：</p>
          <el-date-picker
              style="border: 1px solid #cccccc;border-radius: 6px;width: 70%;"
              type="date"
              placeholder="请选择"
              v-model="checkTime"
          />
        </div>
        <div class="check-footer">
          <el-button style="width: 48%;" @click="handleCheckClose">取消</el-button>
          <el-button type="primary" style="width: 48%;" @click="handleSubmit">确认</el-button>
        </div>
      </div>
    </el-dialog>
  </div>

</template>

<style scoped>
.card {
  padding: 20px 25px;
}

.table {
  width: 100%;
  border-collapse: collapse;
  /* 表格边框合并 */
  text-align: left;
  /* 默认左对齐 */
  font-size: 14px;
  /* 字体大小 */
  color: #606266;
  /* 默认字体颜色 */
  margin-bottom: 20px;
}

.table th,
.table td {
  border: 1px solid #c2bfbf;
  /* 表格单元格边框颜色 */
  padding: 12px;
  /* 单元格内边距 */
}

.table th {
  background: #f5f7fa;
  /* 表头背景色 */
  font-weight: 600;
  /* 表头字体加粗 */
  color: #303133;
  /* 表头字体颜色 */
  text-align: center;
  /* 表头居中 */
}


.table-td {
  display: flex;
}

::v-deep .el-input__wrapper {
  background-color: transparent;
  box-shadow: none;
}

::v-deep .el-select__wrapper {
  background-color: transparent;
  box-shadow: none;
}

::v-deep .el-input-group__append {
  background-color: transparent;
  box-shadow: none;
}
</style>
